import request from '@/api/index'
import { ServiceType, ServiceVersionType, ServiceVersionVOType } from '@coolphk/shared-types/low-code'
import { getDataModelByServiceVersion } from '@/api/dataModel'
import { getServiceById } from '@/api/service'

export const getServiceVersionById = async (id): Promise<ServiceVersionType> => {
  // return request.get<Service>(`${parentURL}/${id}`)
  // const serviceVersion: ServiceVersionType = mockServiceVersions.find((item) => item.id === id)
  // return makePromiseResult(serviceVersion)
  console.log('getServiceVersionById')
  const a = await request.ServiceApi.getServiceVersion(id)
  return a
}

/**
 * 根据服务ID异步获取当前发布的服务版本的详细信息对象
 * 此函数通过一系列的异步调用，从服务ID开始，逐步获取服务版本信息和对应的数据模型，
 * 最终构建并返回一个包含服务版本详细信息的对象
 *
 * @param serviceId 服务的唯一标识符
 * @returns 返回一个Promise，解析为服务版本的详细信息对象
 */
export async function getCurrentServiceVersionVOByServiceId(serviceId): Promise<ServiceVersionVOType> {
  const service = await getServiceById(serviceId)
  const serviceVersion = (await getServiceVersionById(service.currentVersionId))
  const dataModel = (await getDataModelByServiceVersion(serviceVersion))
  const serviceServerVO: ServiceVersionVOType = {
    id: serviceVersion.id,
    version: serviceVersion.version,
    service: service,
    inputModel: dataModel.inputModel,
    outputModel: dataModel.outputModel,
    inputModelTree: [],
    outputModelTree: [],
  }
  // console.log('getCurrentServiceVersionVOByServiceId', serviceServerVO)
  return serviceServerVO
}

/**
 * 根据服务获取发布的服务版本,服务信息与传入的服务相同
 * 此函数的目的是通过服务版本ID获取服务版本信息，并结合数据模型信息，
 * 构建并返回一个包含服务版本详细信息的对象
 *
 * @param service 服务类型对象，其中包含当前版本ID
 * @returns 返回一个Promise，解析为ServiceVersionVOType类型对象，
 *          包含服务版本的详细信息
 */
export async function getCurrentServiceVersionVOByService(service: ServiceType) {
  const serviceVersion = (await getServiceVersionById(service.currentVersionId))
  const dataModel = (await getDataModelByServiceVersion(serviceVersion))
  const serviceServerVO: ServiceVersionVOType = {
    id: serviceVersion.id,
    version: serviceVersion.version,
    service: service,
    inputModel: dataModel.inputModel,
    outputModel: dataModel.outputModel,
    inputModelTree: [],
    outputModelTree: [],
  }
  console.log('getCurrentServiceVersionVOByService', serviceServerVO)
  return serviceServerVO
}
